﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ASPNETVN.PORTAL.Components.Helpers;
using ASPNETVN.PORTAL.Components.UI;
using ASPNETVN.PORTAL.Components.Share;
using CDTM.Modules.TraCuuDiem.Components;
using System.Collections;
using System.Data;
using ASPNETVN.PORTAL.Components.Security;

namespace CDTM.Modules.TraCuuDiem.Controls
{
    public partial class Management : AddEditItemControl
    {
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            //Thiết lập Url đến Control Nhập khẩu dữ liệu.
            Guid moduleID = new Guid(Request.QueryString["mid"]);
            btnQuanLyMatKhau.EnableViewState = false;
            this.btnQuanLyMatKhau.NavigateUrl = HttpUrlBuilder.BuildAddEditUrl(moduleID, 0, "ItemManager");
            this.btnImport.PostBackUrl = HttpUrlBuilder.BuildAddEditUrl(moduleID, 0, "AddEditThongTinSinhVien");
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            btnImport.Enabled = btnImport.Visible = true;

            if (!Page.IsPostBack)
            {
                Guid moduleID = new Guid(Request.QueryString["mid"]);

                //Thiết lập số records trên page
                gvKetQua.PageSize = Convert.ToInt32(this.Settings["TopRecords"].ToString());

                //Ẩn lưới kết quả tìm kiếm khi load page.
                pnlKetQua.Visible = false;

                //Kiểm tra phân quyền.
                ValidatePermission();
            }
        }

        #region Search
        public static List<HocSinh> list;

        protected void btnTim_Click(object sender, EventArgs e)
        {
            TimKiem();
        }

        /// <summary>
        /// Tìm kiếm thông tin điểm tuyển sinh.
        /// </summary>
        private void TimKiem()
        {
            //txtMaSV.Focus();

            //Kiểm tra thông tin hợp lệ
            if (!Validate())
                return;


            //Thực hiện tìm kiếm
            if (txtMaSV.Text.Trim().Length != 0 && txtHoTen.Text.Trim().Length == 0)
                list = HocSinh.SelectByMaSV(txtMaSV.Text.Trim());
            else if (txtMaSV.Text.Trim().Length == 0 && txtHoTen.Text.Trim().Length != 0)
                list = HocSinh.SelectByHoTen(txtHoTen.Text.Trim());
            else if (txtMaSV.Text.Trim().Length != 0 && txtHoTen.Text.Trim().Length != 0)
                list = HocSinh.SelectBy(txtMaSV.Text.Trim(), txtHoTen.Text.Trim());

            //Nếu có dữ liệu -> Binding vào lưới kết quả. Ngược thông báo 'Không tìm thấy thông tin'.
            if (list != null || list.Count > 0)
            {
                gvKetQua.DataSource = list;
                gvKetQua.DataBind();
            }

            pnlKetQua.Visible = true;
        }

        /// <summary>
        /// Kiểm tra các điều kiện hợp lệ trước khi thực hiện tìm kiếm.
        /// </summary>
        /// <returns></returns>
        private bool Validate()
        {
            bool valid = true;

            lblMessage.Text = "";

            if (txtMaSV.Text.Trim().Length == 0 && txtHoTen.Text.Trim().Length == 0)
            {
                valid = false;
                lblMessage.Text = "Hãy nhập 'Mã sinh viên' hoặc 'Họ tên' cần tra cứu.";
                txtMaSV.Focus();
            }
            //else if (txtMaSV.Text.Trim().Length != 0)
            //{
            //    if (!ValidateNumber(txtMaSV.Text.Trim()))
            //    {
            //        valid = false;
            //        lblMessage.Text = "'Mã sinh viên' nhập không đúng, phải là kiểu số.";
            //        txtMaSV.Focus();
            //    }
            //}

            return valid;
        }

        /// <summary>
        /// Kiểm tra giá trị nhập vào có phải là kiểu số?.
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        private bool ValidateNumber(string input)
        {
            bool valid = true;

            char[] arr = input.ToCharArray();

            foreach (char item in arr)
            {
                if (!char.IsNumber(item))
                {
                    valid = false;
                    break;
                }
            }

            return valid;
        }
        #endregion

        #region Paging
        protected void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
        {
            DropDownList ddl = (DropDownList)sender;
            gvKetQua.PageIndex = ddl.SelectedIndex;
            gvKetQua.DataSource = list;
            gvKetQua.DataBind();
        }

        protected void gvKetQua_DataBound(object sender, EventArgs e)
        {
            if (gvKetQua.Rows.Count > 0)
            {
                // Retrieve the pager row.
                GridViewRow bottomPagerRow = gvKetQua.BottomPagerRow;
                GridViewRow topPagerRow = gvKetQua.TopPagerRow;

                // Retrieve the DropDownList and Label controls from the row.
                DropDownList topPageList = (DropDownList)topPagerRow.Cells[0].FindControl("PageDropDownList");
                DropDownList bottomPageList = (DropDownList)bottomPagerRow.Cells[0].FindControl("PageDropDownList");
                Label topPageLabel = (Label)topPagerRow.Cells[0].FindControl("PageLabel");
                Label bottomPageLabel = (Label)bottomPagerRow.Cells[0].FindControl("PageLabel");

                if (topPageList != null && bottomPageList != null)
                {
                    for (int i = 0; i < gvKetQua.PageCount; i++)
                    {
                        int pageNumber = i + 1;
                        ListItem item = new ListItem(pageNumber.ToString());
                        if (i == gvKetQua.PageIndex)
                        {
                            item.Selected = true;
                        }

                        topPageList.Items.Add(item);
                        bottomPageList.Items.Add(item);
                    }
                }

                if (topPageLabel != null && bottomPageLabel != null)
                {
                    topPageLabel.Text = bottomPageLabel.Text = " / " + gvKetQua.PageCount.ToString();
                }
            }
        }

        protected void gvKetQua_PageIndexChanged(object sender, EventArgs e)
        {
            gvKetQua.SelectedIndex = -1;
        }
        #endregion

        #region Permission
        /// <summary>
        /// Kiểm tra phân quyền. Chỉ người quản trị mới có quyền thực hiện chức năng Nhập khẩu/ Xuất khẩu dữ liệu.
        /// </summary>
        private void ValidatePermission()
        {
            Guid moduleID = Guid.Empty;

            if (Request.QueryString["mid"] != null)
                moduleID = new Guid(Request.QueryString["mid"]);

            // Manager Permission.            
            if (PortalSecurity.HasManageAuthorization(moduleID)
                && PortalSecurity.CurrentUser.Identity.IsAuthenticated)
            {
                pnlTopHeader.Visible = true;
            }
            else
                pnlTopHeader.Visible = false;

        }
        #endregion
    }
}